From: kfraser@localhost.localdomain Date: Fri, 2 Feb 2007 15:41:45 +0000 (+0000) Subject: libxc: Domain builder must align initial virtual mapping to 4MB X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15358^2~6 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=44480a08208d2a31fd7c5ff66aaa7cf44f7176bb;p=xen.git libxc: Domain builder must align initial virtual mapping to 4MB boundaries. From: Gerd Hoffmann Signed-off-by: Keir Fraser --- diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c index 8d329ae74f..ae64972ed5 100644 --- a/tools/libxc/xc_dom_core.c +++ b/tools/libxc/xc_dom_core.c @@ -717,6 +717,9 @@ int xc_dom_build_image(struct xc_dom_image *dom) } page_size = XC_DOM_PAGE_SIZE(dom); + /* 4MB align virtual base address */ + dom->parms.virt_base &= ~(((uint64_t)1<<22)-1); + /* load kernel */ if (0 != xc_dom_alloc_segment(dom, &dom->kernel_seg, "kernel", dom->kernel_seg.vstart, diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c index 9e489c320d..fdc3d4ba5e 100644 --- a/tools/libxc/xc_dom_x86.c +++ b/tools/libxc/xc_dom_x86.c @@ -66,11 +66,12 @@ static int count_pgtables(struct xc_dom_image *dom, int pae, extra_pages = dom->alloc_bootstack ? 1 : 0; extra_pages += dom->extra_pages; + extra_pages += 128; /* 512kB padding */ pages = extra_pages; for (;;) { try_virt_end = round_up(dom->virt_alloc_end + pages * PAGE_SIZE_X86, - bits_to_mask(l1_bits)); + bits_to_mask(22)); /* 4MB alignment */ dom->pg_l4 = nr_page_tables(dom->parms.virt_base, try_virt_end, l4_bits); dom->pg_l3 = @@ -313,6 +314,7 @@ static int alloc_magic_pages(struct xc_dom_image *dom) if (xc_dom_feature_translated(dom)) dom->shared_info_pfn = xc_dom_alloc_page(dom, "shared info"); dom->alloc_bootstack = 1; + return 0; }